import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:getx_example/get_put/controller/my_put_controller.dart';

class MyGetxController extends MyPutController {
  @override
  void onInit() {
    super.onInit();

    // 每次
    ever(count, (value) {
      debugPrint("ever -> $value");
    });

    // 当值变化时
    count.listen((value) {
      debugPrint("listen -> $value");
    });

    ever(audi, (value) {
      debugPrint("ever -> audi $value");
    });

    // 第一次
    once(count, (value) {
      debugPrint("once -> $value");
    });

    // 防抖 2 秒内, 2s之内我不接受, 
    debounce(
      count,
      (value) {
        debugPrint("debounce -> $value");
      },
      time: const Duration(seconds: 2),
    );

    // 定时器 1 秒, 每s中
    interval(
      count,
      (value) {
        debugPrint("interval -> $value");
      },
      time: const Duration(seconds: 1),
    );
  }
}
/**
 * 监听整个列表的变化：
如果你想要监听整个列表的变化（比如添加或删除Person对象），你可以使用observe方法。但是，如果你只想监听列表中某个Person对象的name变化，你通常不需要直接监听列表，因为Person对象的name属性已经是响应式的。
dart
people.observe(initial: false, onChange: (List<Person> list) {  
  // 这里会触发当列表本身发生变化时，比如添加或删除元素  
  print("List changed");  
});

在你的UI中，你可以直接使用people列表中的Person对象的name属性，GetX会确保当这些属性变化时，UI会相应地更新。
Obx(() => ListView.builder(  
  itemCount: people.length,  
  itemBuilder: (_, index) => Text(  
    people[index].name.value,  
    style: TextStyle(fontSize: 20),  
  ),  
));

修改Person对象的name：
当你修改列表中某个Person对象的name时，不需要做任何特别的事情来触发监听。由于name是RxString，任何对它的修改都会自动被GetX捕获并触发UI更新。
void changeName(int index, String newName) {  
  people[index].name.value = newName;  
}
 */